package com.clear.chain.linked;

/**
 * 处理器抽象父类
 */
public abstract class Handler {
    protected Handler successor = null;  // 下一个handler

    public void setSuccessor(Handler successor) {
        this.successor = successor;
    }

    public final void handle() {
        boolean handled = doHandle();
        // todo 对下一个处理器的调用抽取到了父类中，子类无需关系
        if (successor != null && !handled) {
            successor.handle();
        }
    }

    // 拥有具体的处理方法 抽象
    protected abstract boolean doHandle();
}
